package models.meta;

import models.meta.map.Bounds;
import models.meta.map.LocationType;
import models.meta.map.Point;

/**
 * @author guysheep
 * google geocoding API 반환 결과
 * <pre>상태 코드
지오코딩 응답 객체의 "status" 필드에는 요청의 상태가 포함되어 있으며, 지오코딩 서비스의 실패 이유를 사용자가 쉽게 추적하도록 도움을 주는 디버깅 정보가 포함될 수도 있습니다. "status" 필드에는 다음 값이 포함될 수 있습니다.
"OK"는 오류가 발생하지 않았음을 나타냅니다. 주소가 성공적으로 파싱되었고 최소 한 개의 지오코드가 반환되었습니다.
"ZERO_RESULTS"는 지오코딩이 성공했지만 반환된 결과가 없음을 나타냅니다. 이는 지오코딩이 존재하지 않는 address 또는 원격 지역의 latlng을 전달한 경우 발생할 수 있습니다.
"OVER_QUERY_LIMIT"는 할당량을 초과했음을 나타냅니다.
"REQUEST_DENIED"는 요청이 거부되었음을 나타냅니다. 일반적인 이유는 sensor 매개변수가 없기 때문입니다.
"INVALID_REQUEST"는 일반적으로 쿼리(address 또는 latlng)가 누락되었음을 나타냅니다.
결과
지오코더가 결과를 반환하면 결과는 (JSON) results 배열 내에 배치됩니다. 주소가 없는 경우와 같이 지오코더에서 반환할 결과가 없는 경우에도 빈 results 배열이 반환됩니다. (XML 응답은 0개 이상의 <result> 요소로 구성됩니다.)
일반적인 결과는 다음 필드로 구성됩니다.
types[] 배열은 반환된 결과의 유형을 나타냅니다. 이 배열은 결과에 반환된 기능의 유형을 나타내는 하나 이상의 태그 집합을 포함합니다. 예를 들어 '시카고'라는 지오코드는 'locality'를 반환하여 '시카고'가 도시임을 나타내며 'political'도 반환하여 정치적 엔티티임을 나타냅니다.
formatted_address는 이 위치에 대한 읽을 수 있는 주소를 포함하는 문자열입니다. 이 주소는 주로 'postal address'와 일치하고 국가마다 다를 수 있습니다. 영국과 같은 일부 국가에서는 라이센스 제한으로 인해 실제 주소의 배포가 허용되지 않습니다. 이 주소는 일반적으로 하나 이상의 주소 구성요소로 이루어집니다. 예를 들어 '111 8th Avenue, New York, NY'라는 주소에는 '111'(번지수), '8th Avenue'(경로), 'New York'(도시) 및 'NY'(미국의 주)와 같은 개별 주소 구성요소가 포함됩니다. 이러한 주소 구성요소에는 아래에서 설명하는 것과 같은 추가 정보가 포함됩니다.
address_components[]는 위에 설명된 대로 개별 주소 구성요소를 포함하는 배열입니다. 일반적으로 각 address_component에는 다음 정보가 포함됩니다.
types[]는 주소 구성요소의 유형을 나타내는 배열입니다.
long_name은 지오코더가 반환한 주소 구성요소의 전체 텍스트 설명 또는 이름입니다.
short_name은 주소 구성요소의 텍스트 약칭입니다(사용 가능한 경우). 예를 들어 알래스카 주의 주소 구성요소에는 'Alaska'의 long_name과 두 글자의 우편 약자를 사용하는 'AK'의 short_name이 포함될 수 있습니다.
address_components[]에는 formatted_address 내에 명시된 것보다 더 많은 주소 구성요소가 포함될 수 있습니다.
geometry에는 다음 정보가 포함되어 있습니다.
location은 지오코딩된 위도와 경도 값을 포함합니다. 일반적인 주소 조회의 경우 대개 이 필드가 가장 중요합니다.
location_type는 지정된 위치에 대한 추가 데이터를 저장합니다. 현재 다음 값이 지원됩니다.
"ROOFTOP"은 번지 수준까지 정확한 위치 정보를 가지고 있기 때문에 반환된 결과가 정확한 지오코드임을 나타냅니다.
"RANGE_INTERPOLATED"는 반환된 결과가 두 정확한 점(예: 교차점) 사이에 삽입(interpolate)된 일반적으로 도로에 대한 근사값을 반영함을 나타냅니다. 삽입(interpolate)된 결과는 일반적으로 옥상 지오코드를 번지수에 사용할 수 없을 때 반환됩니다.
"GEOMETRIC_CENTER"는 반환된 결과가 폴리라인(예: 거리) 또는 폴리곤(지역)과 같이 결과의 형상 중심임을 나타냅니다.
"APPROXIMATE"는 반환된 결과가 근사치임을 나타냅니다.
viewport에는 뷰포트 경계상자의 southwest 및 northeast 모서리를 정의하는 두 개의 위도/경도 값으로 지정된, 반환된 결과를 표시하기 위한 권장 뷰포트가 포함되어 있습니다. 일반적으로 뷰포트는 사용자에게 표시할 때 결과를 프레임에 넣는 데 사용됩니다.
선택적으로 반환되는 bounds는 반환된 결과를 완전히 포함할 수 있는 경계상자를 저장합니다. 이러한 경계는 권장된 뷰포트와 일치하지 않을 수도 있습니다. 예를 들어 샌프란시스코에는 기술적으로 도시에 속해 있지만 뷰포트에 반환되지 않아야 하는Farallon 섬이 포함되어 있습니다
</pre>
 */
public class Geometry {

	public Bounds bounds;
	public Point location;
	public LocationType locationType;
	public Bounds viewPort;
	public String[] types;
	public boolean partialMatch;
}
